Differences in behavior between Middleware and Service class in ASP.NET Core

Middleware और Service क्लास के बीच का अंतर

Middleware और Service दोनों के निर्माण करने के लिए क्लास का उपयोग किया जाता है, लेकिन उनका उपयोग और व्यवहार अलग होता है।

1. Middleware और Service क्लास के बीच का अंतर

विशेषता Middleware Class Service Class
उद्देश्य (Purpose) HTTP रिक्वेस्ट और रिस्पॉन्स को इंटरसेप्ट करके प्रोसेस करना। एप्लिकेशन के बिजनेस लॉजिक, डेटा एक्सेस या अन्य कार्यों को प्रोसेस करना।
कैसे काम करता है? Request Pipeline में Middleware Delegates का उपयोग करता है। Dependency Injection (DI) का उपयोग करता है।
रजिस्ट्रेशन (Registration) app.UseMiddleware<TMiddleware>() services.AddScoped<TService>(), AddSingleton(), या AddTransient()
आंतरिक कार्यप्रणाली HTTP Context को हैंडल करता है (HttpContext) Data Processing, Database Operations, Business Logic को हैंडल करता है
कैसे कॉल करें? app.UseMiddleware<MyMiddleware>() Constructor Injection द्वारा उपयोग किया जाता है।
उदाहरण LoggingMiddleware, AuthenticationMiddleware UserService, EmailService, DatabaseService

2. Middleware Class कैसे बनती है?

Middleware क्लास को RequestDelegate और HttpContext के साथ बनाना पड़ता है।

public class MyMiddleware
{
    private readonly RequestDelegate _next;

    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        Console.WriteLine("Middleware Execution Started");
        await _next(context);
        Console.WriteLine("Middleware Execution Ended");
    }
}

Middleware को Configure करना (Program.cs)

app.UseMiddleware<MyMiddleware>();

3. Service Class कैसे बनती है?

Service क्लास को Dependency Injection (DI) के माध्यम से उपयोग किया जाता है।

public interface IUserService
{
    string GetUserName();
}

public class UserService : IUserService
{
    public string GetUserName()
    {
        return "Ajeet";
    }
}

Service को Configure करना (Program.cs)

builder.Services.AddScoped<IUserService, UserService>();

Service का उपयोग Controller में

public class HomeController : Controller
{
    private readonly IUserService _userService;

    public HomeController(IUserService userService)
    {
        _userService = userService;
    }

    public IActionResult Index()
    {
        string name = _userService.GetUserName();
        return Content($"User Name: {name}");
    }
}

4. Middleware और Service क्लास में मुख्य अंतर

  • Middleware HTTP रिक्वेस्ट पाइपलाइन का हिस्सा होता है और HTTP रिक्वेस्ट/रिस्पॉन्स को हैंडल करता है।
  • Service DI कंटेनर में रजिस्टर होती है और किसी भी क्लास में उपयोग की जा सकती है।
  • Middleware को app.UseMiddleware<T>() से ऐड किया जाता है, जबकि Service को services.AddScoped<T>() से ऐड किया जाता है।
  • Middleware को Pipeline में ही उपयोग किया जाता है, लेकिन Service को किसी भी Component (Controller, Middleware, आदि) में Inject किया जा सकता है।

Middleware और Service का आपस में संबंध

Middleware Services का उपयोग कर सकता है, लेकिन Middleware Service नहीं होता। उदाहरण के लिए, एक LoggingMiddleware को ILogger सर्विस की जरूरत हो सकती है।

Middleware में Service का उपयोग

public class MyMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IUserService _userService;

    public MyMiddleware(RequestDelegate next, IUserService userService)
    {
        _next = next;
        _userService = userService;
    }

    public async Task Invoke(HttpContext context)
    {
        string name = _userService.GetUserName();
        await context.Response.WriteAsync($"Hello, {name}");
        await _next(context);
    }
}

Middleware को Configure करना

app.UseMiddleware<MyMiddleware>();

निष्कर्ष

Middleware और Service दोनों में क्लास का उपयोग किया जाता है, लेकिन:

  • Middleware HTTP अनुरोध/प्रतिक्रिया को नियंत्रित करता है, जबकि Service बिजनेस लॉजिक को नियंत्रित करती है।
  • Middleware हमेशा Pipeline में चलता है, लेकिन Services किसी भी Component में Inject हो सकती हैं।
  • Middleware में Service को Inject किया जा सकता है, लेकिन Service को Middleware की जरूरत नहीं होती।

Next: क्या ASP.NET Core में सेवा बनाते समय उसे कंटेनर में पंजीकृत करना अनिवार्य है?

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks